﻿using Search4.Domain.Repository;
using System;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Search4.Web
{
    public partial class Default : System.Web.UI.Page
    {
        #region CONTROLES
        public String NomeUsuario { get; set; }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            ConfigurarPagina();
            AtualizarMensagemBoasVindas();
            CarregaUltimosEstabelecimentosCadastrados();
            ConfiguraCategorias();
            ConfiguraSlideShow();
        }

        private void ConfiguraSlideShow()
        {
            var estabelecimentoRepository = new EstabelecimentoRepository();
            var estabelecimentos = estabelecimentoRepository.ObterEstabelecimentosRandomicos();

            if (estabelecimentos.Count > 0)
            {
                for (int i = 0; i < estabelecimentos.Count; i++)
                {
                    if (i == 0)
                    {
                        lbtNomeEst.Text = estabelecimentos[0].Nome;
                        lblDescricao.Text = estabelecimentos[0].Descricao;
                        lbtVermais.Click += AbrirEstabelecimento;
                        lbtVermais.CommandArgument = estabelecimentos[0].IdEstabelecimento.ToString();
                    }
                    if (i == 1)
                    {
                        lbtNomeEst2.Text = estabelecimentos[1].Nome;
                        lblDescricao2.Text = estabelecimentos[1].Descricao;
                        lbtVermais2.Click += AbrirEstabelecimento;
                        lbtVermais2.CommandArgument = estabelecimentos[1].IdEstabelecimento.ToString();
                    }
                    if (i == 2)
                    {
                        lbtNomeEst3.Text = estabelecimentos[2].Nome;
                        lblDescricao3.Text = estabelecimentos[2].Descricao;
                        lbtVermais3.Click += AbrirEstabelecimento;
                        lbtVermais3.CommandArgument = estabelecimentos[2].IdEstabelecimento.ToString();
                    }
                }
            }
        }

        void AbrirEstabelecimento(object sender, EventArgs e)
        {
            var btn = (LinkButton)(sender);
            Response.Redirect(String.Concat("/Paginas/Detalhe.aspx?e=", btn.CommandArgument));
        }

        private void ConfiguraCategorias()
        {
            lbtBares.Click += CarregaCategoria;
            lbtBares.CommandArgument = lbtBares.Text;

            lbtRestaurantes.Click += CarregaCategoria;
            lbtRestaurantes.CommandArgument = lbtRestaurantes.Text;

            lbtBoates.Click += CarregaCategoria;
            lbtBoates.CommandArgument = lbtBoates.Text;

            lbtBrinquedos.Click += CarregaCategoria;
            lbtBrinquedos.CommandArgument = lbtBrinquedos.Text;

            lbtClinicas.Click += CarregaCategoria;
            lbtClinicas.CommandArgument = lbtClinicas.Text;

            lbtDepartamentos.Click += CarregaCategoria;
            lbtDepartamentos.CommandArgument = lbtDepartamentos.Text;

            lbtEscolas.Click += CarregaCategoria;
            lbtEscolas.CommandArgument = lbtEscolas.Text;

            lbtFarmacias.Click += CarregaCategoria;
            lbtFarmacias.CommandArgument = lbtFarmacias.Text;

            lbtHoteis.Click += CarregaCategoria;
            lbtHoteis.CommandArgument = lbtHoteis.Text;

            lbtInformatica.Click += CarregaCategoria;
            lbtInformatica.CommandArgument = lbtInformatica.Text;

            lbtLan.Click += CarregaCategoria;
            lbtLan.CommandArgument = lbtLan.Text;

            lbtMercados.Click += CarregaCategoria;
            lbtMercados.CommandArgument = lbtMercados.Text;

            lbtModa.Click += CarregaCategoria;
            lbtModa.CommandArgument = lbtModa.Text;

            lbtPadarias.Click += CarregaCategoria;
            lbtPadarias.CommandArgument = lbtPadarias.Text;

            lbtPapelarias.Click += CarregaCategoria;
            lbtPapelarias.CommandArgument = lbtPapelarias.Text;

            lbtPostos.Click += CarregaCategoria;
            lbtPostos.CommandArgument = lbtPostos.Text;

            lbtRestaurantes.Click += CarregaCategoria;
            lbtRestaurantes.CommandArgument = lbtRestaurantes.Text;

            lbtSaloes.Click += CarregaCategoria;
            lbtSaloes.CommandArgument = lbtSaloes.Text;

            lbtVeiculos.Click += CarregaCategoria;
            lbtVeiculos.CommandArgument = lbtVeiculos.Text;
        }

        void CarregaCategoria(object sender, EventArgs e)
        {
            var btn = (LinkButton)(sender);
            Response.Redirect(String.Concat("/Paginas/Consulta.aspx?categ=", btn.CommandArgument));
        }


        #region MÉTODOS UTILITÁRIOS
        private void ConfigurarPagina()
        {
            var lbtPainel = (LinkButton)Master.FindControl("lbtPainel");
            var lblSeparador = (Label)Master.FindControl("lblSeparador");
            var lbtCadastro = (LinkButton)Master.FindControl("lbtCadastro");
            var lblWelcome = (Label)Master.FindControl("lblWelcome");
            var lbtLogin = (LinkButton)Master.FindControl("lbtLogin");
            var lbtLogout = (LinkButton)Master.FindControl("lbtLogout");
            var usuarioLogado = VerificaSeUsuarioEstaLogado();
            if (usuarioLogado)
            {
                lbtLogin.Visible = false;
                lbtCadastro.Visible = false;
                lbtLogout.Visible = true;
                lblWelcome.Visible = true;
                lbtPainel.Visible = true;
                lblSeparador.Visible = true;
                var usuarioRepository = new UsuarioRepository();
                var usuario = usuarioRepository.ObterPeloIdentificador(Convert.ToInt32(Session["USUARIO"]));
                NomeUsuario = usuario.Nome;
            }
            else
            {
                lbtLogin.Visible = true;
                lbtCadastro.Visible = true;
                lbtLogout.Visible = false;
                lblWelcome.Visible = false;
                lbtPainel.Visible = false;
                lblSeparador.Visible = false;
            }
        }

        private void AtualizarMensagemBoasVindas()
        {
            var lblWelcome = (Label)Master.FindControl("lblWelcome");
            lblWelcome.Text = String.Concat(lblWelcome.Text, NomeUsuario);
            lblWelcome.Visible = true;
        }

        private Boolean VerificaSeUsuarioEstaLogado()
        {
            return Session["USUARIO"] != null;
        }
        #endregion


        private void CarregaUltimosEstabelecimentosCadastrados()
        {
            var estabelecimentoRepository = new EstabelecimentoRepository();
            var estabelecimentos = estabelecimentoRepository.ObterOsTresUltimosCadastrados();

            if (estabelecimentos.Count > 0)
            {
                for (int i = 0; i < estabelecimentos.Count; i++)
                {
                    var divProduct = new HtmlGenericControl("div");
                    divProduct.Attributes.Add("class", "product");

                    //Montagem foto do estabelecimento
                    var divImgBox = new HtmlGenericControl("div");
                    divImgBox.Attributes.Add("class", "img-box");

                    var divBoxFrame = new HtmlGenericControl("div");
                    divBoxFrame.Attributes.Add("class", "box-frame");

                    var image = new Image();
                    image.ImageUrl = "~/css/images/shop-default.png";

                    divImgBox.Controls.Add(divBoxFrame);
                    divImgBox.Controls.Add(image);
                    //Fim montagem foto estabelecimento

                    var divPrEntry = new HtmlGenericControl("div");
                    divPrEntry.Attributes.Add("class", "pr-entry");

                    var h4 = new HtmlGenericControl("h4");
                    var lbtNomeEstabelecimento = new LinkButton();
                    lbtNomeEstabelecimento.ID = String.Concat("lbtNomeEstabelecimento", i);
                    lbtNomeEstabelecimento.CssClass = "link-button";
                    lbtNomeEstabelecimento.Text = estabelecimentos[i].Nome;
                    lbtNomeEstabelecimento.Click += lbtNomeEstabelecimento_Click;
                    lbtNomeEstabelecimento.CommandArgument = estabelecimentos[i].IdEstabelecimento.ToString();
                    h4.Controls.Add(lbtNomeEstabelecimento);

                    var p = new HtmlGenericControl("p");
                    p.InnerText = estabelecimentos[i].Descricao;

                    divPrEntry.Controls.Add(h4);
                    divPrEntry.Controls.Add(p);

                    divProduct.Controls.Add(divImgBox);
                    divProduct.Controls.Add(divPrEntry);

                    pnlUltimosEstabelecimentos.Controls.Add(divProduct);
                }
            }
        }

        void lbtNomeEstabelecimento_Click(object sender, EventArgs e)
        {
            var btn = (LinkButton)(sender);
            Response.Redirect(String.Concat("/Paginas/Detalhe.aspx?e=", btn.CommandArgument));
        }
    }
}